home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 10 / ioProg_10.iso / soft / sdk20 / jsdk05.cab / Samples / Debugger / Java Debugger / Helpers / JDbgHlpr / Helpers.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-09-25  |  8.9 KB  |  345 lines

  1. /*
  2.  * helpers.cpp - Native methods.
  3.  *
  4.  * (C) Copyright 1996 Microsoft Corporation
  5.  */
  6.  
  7.  
  8. /* Headers
  9.  **********/
  10.  
  11. #include "project.hpp"
  12. #pragma hdrstop
  13.  
  14. #include "com_ms_debug_RemoteBooleanObjectHelper.h"
  15. #include "com_ms_debug_RemoteDoubleObjectHelper.h"
  16. #include "com_ms_debug_RemoteFloatObjectHelper.h"
  17. #include "com_ms_debug_EnumRemoteBooleanValueHelper.h"
  18. #include "com_ms_debug_EnumRemoteDoubleValueHelper.h"
  19. #include "com_ms_debug_EnumRemoteFloatValueHelper.h"
  20. #include "com_ms_debug_ConstantPoolHelper.h"
  21. #include "com_ms_debug_LockBytesHelper.h"
  22.  
  23.  
  24. /***************************** Exported Functions ****************************/
  25.  
  26.  
  27. /*
  28.  *  Native method "helpers" are needed to marshal the following debugger interface methods:
  29.  *
  30.  *      IJavaEnumRemoteBooleanValue::GetNext()
  31.  *      IRemoteBooleanObject::GetValue()
  32.  *      IRemoteBooleanObject::SetValue()
  33.  *      
  34.  *      IJavaEnumRemoteFloatValue::GetNext()
  35.  *      IRemoteFloatObject::GetValue()
  36.  *      IRemoteFloatObject::SetValue()
  37.  *      
  38.  *      IJavaEnumRemoteDoubleValue::GetNext()
  39.  *      IRemoteDoubleObject::GetValue()
  40.  *      IRemoteDoubleObject::SetValue()
  41.  *      
  42.  *      IRemoteMethodField::GetBytes()
  43.  *      
  44.  *      IRemoteClassField::GetConstantPoolItem()
  45.  */
  46.  
  47.  
  48. /* boolean */ long __cdecl com_ms_debug_EnumRemoteBooleanValueHelper_GetNext(Hcom_ms_debug_EnumRemoteBooleanValueHelper *thisptr)
  49. {
  50.     JAVA_BOOLEAN value;
  51.     IJavaEnumRemoteBooleanValue *pierbv;
  52.  
  53.     pierbv = (IJavaEnumRemoteBooleanValue *)convert_Java_Object_to_IUnknown((HObject *)(thisptr->m_ierbv), &IID_IJavaEnumRemoteBooleanValue);
  54.  
  55.     if (pierbv)
  56.     {
  57.         HRESULT hr;
  58.  
  59.         hr = pierbv->GetNext(&value);
  60.     
  61.         switch (hr)
  62.         {
  63.             case S_OK:            // Retrieved next value.
  64.                 break;
  65.     
  66.             case S_FALSE:        // No more values.
  67.                 SignalError(NULL, "com/ms/com/ComSuccessException", "");
  68.                 break;
  69.     
  70.             default:            // Error.
  71.                 SignalError(NULL, "com/ms/com/ComFailException", "IJavaEnumRemoteBooleanValue::GetNext");
  72.                 break;
  73.         }
  74.     }
  75.     else
  76.         SignalError(0, JAVAPKG "ClassCastException", 0);
  77.  
  78.     return(value);
  79. }
  80.  
  81.  
  82. /* boolean */ long __cdecl com_ms_debug_RemoteBooleanObjectHelper_GetValue(Hcom_ms_debug_RemoteBooleanObjectHelper *thisptr)
  83. {
  84.     JAVA_BOOLEAN value;
  85.     IRemoteBooleanObject *pirbo;
  86.  
  87.     pirbo = (IRemoteBooleanObject *)convert_Java_Object_to_IUnknown((HObject *)thisptr->m_irbo, &IID_IRemoteBooleanObject);
  88.  
  89.     if (pirbo)
  90.     {
  91.         if (pirbo->GetValue(&value) != S_OK)
  92.             SignalError(NULL, "com/ms/com/ComFailException", "IRemoteBooleanObject::GetValue");
  93.     }
  94.     else
  95.         SignalError(0, JAVAPKG "ClassCastException", 0);
  96.  
  97.     return(value);
  98. }
  99.  
  100.  
  101. void __cdecl com_ms_debug_RemoteBooleanObjectHelper_SetValue(Hcom_ms_debug_RemoteBooleanObjectHelper *thisptr, /* boolean */ long newvalue)
  102. {
  103.     IRemoteBooleanObject *pirbo;
  104.  
  105.     pirbo = (IRemoteBooleanObject *)convert_Java_Object_to_IUnknown((HObject *)thisptr->m_irbo, &IID_IRemoteBooleanObject);
  106.  
  107.     if (pirbo)
  108.     {
  109.         if (pirbo->SetValue((JAVA_BOOLEAN)newvalue) != S_OK)
  110.             SignalError(NULL, "com/ms/com/ComFailException", "IRemoteBooleanObject::SetValue");
  111.     }
  112.     else
  113.         SignalError(0, JAVAPKG "ClassCastException", 0);
  114. }
  115.  
  116.  
  117. JAVA_FLOAT __cdecl com_ms_debug_EnumRemoteFloatValueHelper_GetNext(Hcom_ms_debug_EnumRemoteFloatValueHelper *thisptr)
  118. {
  119.     JAVA_FLOAT value;
  120.     IJavaEnumRemoteFloatValue *pierfv;
  121.  
  122.     pierfv = (IJavaEnumRemoteFloatValue *)convert_Java_Object_to_IUnknown((HObject *)thisptr->m_ierfv, &IID_IJavaEnumRemoteFloatValue);
  123.  
  124.     if (pierfv)
  125.     {
  126.         HRESULT hr;
  127.  
  128.         hr = pierfv->GetNext(&value);
  129.     
  130.         switch (hr)
  131.         {
  132.             case S_OK:            // Retrieved next value.
  133.                 break;
  134.     
  135.             case S_FALSE:        // No more values.
  136.                 SignalError(NULL, "com/ms/com/ComSuccessException", "");
  137.                 break;
  138.     
  139.             default:            // Error.
  140.                 SignalError(NULL, "com/ms/com/ComFailException", "IJavaEnumRemoteFloatValue::GetNext");
  141.                 break;
  142.         }
  143.     }
  144.     else
  145.         SignalError(0, JAVAPKG "ClassCastException", 0);
  146.  
  147.     return(value);
  148. }
  149.  
  150.  
  151. JAVA_FLOAT __cdecl com_ms_debug_RemoteFloatObjectHelper_GetValue(Hcom_ms_debug_RemoteFloatObjectHelper *thisptr)
  152. {
  153.     JAVA_FLOAT value;
  154.     IRemoteFloatObject *pirfo;
  155.  
  156.     pirfo = (IRemoteFloatObject *)convert_Java_Object_to_IUnknown((HObject *)thisptr->m_irfo, &IID_IRemoteFloatObject);
  157.  
  158.     if (pirfo)
  159.     {
  160.         if (pirfo->GetValue(&value) != S_OK)
  161.             SignalError(NULL, "com/ms/com/ComFailException", "IRemoteFloatObject::GetValue");
  162.     }
  163.     else
  164.         SignalError(0, JAVAPKG "ClassCastException", 0);
  165.  
  166.     return(value);
  167. }
  168.  
  169.  
  170. void __cdecl com_ms_debug_RemoteFloatObjectHelper_SetValue(Hcom_ms_debug_RemoteFloatObjectHelper *thisptr, float newvalue)
  171. {
  172.     IRemoteFloatObject *pirfo;
  173.  
  174.     pirfo = (IRemoteFloatObject *)convert_Java_Object_to_IUnknown((HObject *)thisptr->m_irfo, &IID_IRemoteFloatObject);
  175.  
  176.     if (pirfo)
  177.     {
  178.         if (pirfo->SetValue((JAVA_FLOAT*)&newvalue) != S_OK)
  179.             SignalError(NULL, "com/ms/com/ComFailException", "IRemoteFloatObject::SetValue");
  180.     }
  181.     else
  182.         SignalError(0, JAVAPKG "ClassCastException", 0);
  183. }
  184.  
  185.  
  186. JAVA_DOUBLE __cdecl com_ms_debug_EnumRemoteDoubleValueHelper_GetNext(Hcom_ms_debug_EnumRemoteDoubleValueHelper *thisptr)
  187. {
  188.     JAVA_DOUBLE value;
  189.     IJavaEnumRemoteDoubleValue *pierdv;
  190.  
  191.     pierdv = (IJavaEnumRemoteDoubleValue *)convert_Java_Object_to_IUnknown((HObject *)thisptr->m_ierdv, &IID_IJavaEnumRemoteDoubleValue);
  192.  
  193.     if (pierdv)
  194.     {
  195.         HRESULT hr;
  196.  
  197.         hr = pierdv->GetNext(&value);
  198.     
  199.         switch (hr)
  200.         {
  201.             case S_OK:            // Retrieved next value.
  202.                 break;
  203.     
  204.             case S_FALSE:        // No more values.
  205.                 SignalError(NULL, "com/ms/com/ComSuccessException", "");
  206.                 break;
  207.     
  208.             default:            // Error.
  209.                 SignalError(NULL, "com/ms/com/ComFailException", "IJavaEnumRemoteDoubleValue::GetNext");
  210.                 break;
  211.         }
  212.     }
  213.     else
  214.         SignalError(0, JAVAPKG "ClassCastException", 0);
  215.  
  216.     return(value);
  217. }
  218.  
  219.  
  220. JAVA_DOUBLE __cdecl com_ms_debug_RemoteDoubleObjectHelper_GetValue(Hcom_ms_debug_RemoteDoubleObjectHelper *thisptr)
  221. {
  222.     JAVA_DOUBLE value;
  223.     IRemoteDoubleObject *pirdo;
  224.  
  225.     pirdo = (IRemoteDoubleObject *)convert_Java_Object_to_IUnknown((HObject *)thisptr->m_irdo, &IID_IRemoteDoubleObject);
  226.  
  227.     if (pirdo)
  228.     {
  229.         if (pirdo->GetValue(&value) != S_OK)
  230.             SignalError(NULL, "com/ms/com/ComFailException", "IRemoteDoubleObject::GetValue");
  231.     }
  232.     else
  233.         SignalError(0, JAVAPKG "ClassCastException", 0);
  234.  
  235.     return(value);
  236. }
  237.  
  238.  
  239. void __cdecl com_ms_debug_RemoteDoubleObjectHelper_SetValue(Hcom_ms_debug_RemoteDoubleObjectHelper *thisptr, double newvalue)
  240. {
  241.     IRemoteDoubleObject *pirdo;
  242.  
  243.     pirdo = (IRemoteDoubleObject *)convert_Java_Object_to_IUnknown((HObject *)thisptr->m_irdo, &IID_IRemoteDoubleObject);
  244.  
  245.     if (pirdo)
  246.     {
  247.         if (pirdo->SetValue((JAVA_DOUBLE *)&newvalue) != S_OK)
  248.             SignalError(NULL, "com/ms/com/ComFailException", "IRemoteDoubleObject::SetValue");
  249.     }
  250.     else
  251.         SignalError(0, JAVAPKG "ClassCastException", 0);
  252. }
  253.  
  254.  
  255. ClassArrayOfByte * __cdecl com_ms_debug_LockBytesHelper_GetBytes(Hcom_ms_debug_LockBytesHelper *, Hcom_ms_debug_ILockBytes *pjilb)
  256. {
  257.     ClassArrayOfByte *pjabyte = NULL;
  258.     ILockBytes *pilb;
  259.  
  260.     pilb = (ILockBytes *)convert_Java_Object_to_IUnknown((Hjava_lang_Object *)pjilb, &IID_ILockBytes);
  261.  
  262.     if (pilb)
  263.     {
  264.         HRESULT hr;
  265.         STATSTG statstg;
  266.     
  267.         // How many bytes can be read?
  268.     
  269.         hr = pilb->Stat(&statstg, STATFLAG_NONAME);
  270.     
  271.         if (hr == S_OK)
  272.         {
  273.             pjabyte = (ClassArrayOfByte *)ArrayAlloc(T_BYTE, statstg.cbSize.LowPart);
  274.     
  275.             if (pjabyte)
  276.             {
  277.                 ULARGE_INTEGER ulnOffset;
  278.                 ULONG ulcbRead;
  279.     
  280.                 ulnOffset.QuadPart = 0;
  281.     
  282.                 hr = pilb->ReadAt(ulnOffset, pjabyte->body, statstg.cbSize.LowPart, &ulcbRead);
  283.     
  284.                 if (hr != S_OK)
  285.                 {
  286.                     SignalError(0, "com.ms.com.ComFailException", "ILockBytes::ReadAt");
  287.                     pjabyte = NULL;
  288.                 }
  289.             }
  290.             else
  291.                 SignalError(0, JAVAPKG "OutOfMemoryError", 0);
  292.         }
  293.         else
  294.             SignalError(0, "com.ms.com.ComFailException", "ILockBytes::Stat");
  295.     }
  296.     else
  297.         SignalError(0, JAVAPKG "ClassCastException", 0);
  298.  
  299.     return(pjabyte);
  300. }
  301.  
  302.  
  303. ClassArrayOfByte * __cdecl com_ms_debug_ConstantPoolHelper_GetConstantPoolItem(Hcom_ms_debug_ConstantPoolHelper *thisptr, int niItem)
  304. {
  305.     ClassArrayOfByte *pjabyte = NULL;
  306.  
  307.     if (thisptr->m_ircf)
  308.     {
  309.         IRemoteClassField *pircf;
  310.     
  311.         pircf = (IRemoteClassField *)convert_Java_Object_to_IUnknown((Hjava_lang_Object *)(thisptr->m_ircf), &IID_IRemoteClassField);
  312.     
  313.         if (pircf)
  314.         {
  315.             HRESULT hr;
  316.             PBYTE pbyteItem;
  317.             ULONG ulcbLen;
  318.  
  319.             hr = pircf->GetConstantPoolItem(niItem, &pbyteItem, &ulcbLen);
  320.  
  321.             if (hr == S_OK)
  322.             {
  323.                 pjabyte = (ClassArrayOfByte *)ArrayAlloc(T_BYTE, ulcbLen);
  324.         
  325.                 if (pjabyte)
  326.                     CopyMemory(pjabyte->body, pbyteItem, ulcbLen);
  327.                 else
  328.                     SignalError(0, JAVAPKG "OutOfMemoryError", 0);
  329.  
  330.                 CoTaskMemFree(pbyteItem);
  331.                 pbyteItem = NULL;
  332.             }
  333.             else
  334.                 SignalError(0, "com.ms.com.ComFailException", "IRemoteClassField::GetConstantPoolItem");
  335.         }
  336.         else
  337.             SignalError(0, JAVAPKG "ClassCastException", 0);
  338.     }
  339.     else
  340.         SignalError(0, JAVAPKG "IllegalArgumentException", 0);
  341.  
  342.     return(pjabyte);
  343. }
  344.  
  345.